package Controlador;

import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;

import org.hibernate.Session;
import org.hibernate.Transaction;

import ControladorPersistencia.AdminGanacia;
import ControladorPersistencia.AdminRodamiento;
import Dao.SolicitudRodamientoDAO;
import Negocio.Cliente;
import Negocio.CondicionesPago;
import Negocio.Cotizacion;
import Negocio.ItemListaPreciosCPR;
import Negocio.ItemSolicitud;
import Negocio.ListaPreciosCPR;
import Negocio.Proveedor;
import Negocio.Rodamiento;
import Negocio.SolicitudRodamientos;
import Negocio.Stock;
import Persistencia.HibernateUtil;
import VO.CotizacionVO;
import VO.ItemListaPreciosVO;
import VO.ItemSolicitudVO;
import VO.ListaPreciosVO;
import VO.ProveedorVO;
import VO.RodamientoVO;
import VO.SolicitudRodamientosVO;


public class Sistema {
        
        public static void crearCosas() {
                try {
                //Sistema sistema = new Sistema();
                Session session= HibernateUtil.getSessionFactory().getCurrentSession();
                Transaction t =session.beginTransaction();
                
                Float ganancia = (float) 15.00;
                AdminGanacia.getInstancia().SetGanancia(ganancia);
                System.out.println("Set Ganancia: " + ganancia + " %");
                
                CondicionesPago cp = new CondicionesPago( "condicion1", 10, (float)0.1);
                Cliente c=new Cliente("27202443","Pablo S" , true, cp);
                
                session.save(c);
                System.out.print("Cliente creado con id: ");
                System.out.println(c.getId());
                t.commit();
                
                System.out.println("CREO LOS RODAMIENTOS");
                System.out.flush(); 
                for(int i=0;i<10;i++)
                {
                        System.out.println("Creando rodamiento: "+Integer.toString(i));
                        Rodamiento r=new Rodamiento(Integer.toString(1110+i), "Rodamiento numero "+Integer.toString(i), 4 , "no se" , new Stock(10 +i, 4));
                        AdminRodamiento.getInstance().grabarRodamiento(r);
                        r.getStock().addMovimientoAlta(10);
                }
//              session.beginTransaction();
//              List<Rodamiento> localidades=session.createQuery("from Rodamiento").list();
//              
//              Iterator<Rodamiento> it = localidades.iterator();
//              
//              System.out.println("elementos:" + Integer.toString(localidades.size()));
//              
//              session.getTransaction().commit();
//              
//              
                System.out.println("Creo CPR");
                CPR cpr=new CPR();
                System.out.println("Creo ODV");
                Odv odv = new Odv();
                
                System.out.println("Creando Proveedores y Listas de precios");
                crearProveedorConListaPrecios("SKF China", "222-222-222", "30 dias",new Float(12),new Float(9),"SKF","China","ZZ");
                crearProveedorConListaPrecios("SKF Argentina", "222-333-222", "30 dias",new Float(12),new Float(7),"SKF","Argentina","ZZ");
                crearProveedorConListaPrecios("SNR Mexico","3333-3335-333","30 Dias",new Float(10),new Float(8),"SNR","Mexico","FF");
                crearProveedorConListaPrecios("SNR EEUU","3333-4567-333","30 Dias",new Float(10),new Float(11),"SNR","EEUU","ZZ");
                crearProveedorConListaPrecios("INA Argentina","444-3333-333","30 Dias",new Float(10),new Float(10),"INA","Argentina","ZZ");
                
                
                System.out.println("Armando comparativa de precios");
                ListaPreciosCPR lcpr = cpr.armarComparativaPrecios();
                
                
                Iterator<ItemListaPreciosCPR> it1 = lcpr.getItems().iterator();
                while(it1.hasNext())
                {
                        System.out.println(it1.next().toString());
                }

                
                System.out.println("Inicio Test Solicitudes de rodamiento "+"\n");
                
                SolicitudRodamientosVO sr= new SolicitudRodamientosVO();
                sr.setCliente(odv.clienteToVO(c));
                sr.setFecha(new Date());
                
                ArrayList<RodamientoVO> asd = cpr.obtenerRodamientos();
                Iterator<RodamientoVO> itrod=asd.iterator();
                int i=0;
                while(itrod.hasNext())
                {
                        ItemSolicitudVO isvo=new ItemSolicitudVO();
                        isvo.setRodamiento(itrod.next());
                        isvo.setCantidad(5+i);
                        sr.getItemsSolicitudes().add(isvo);
                        i++;
                }
                
                System.out.println("--------------STOCK DE RODAMIENTOS ---------------");
                itrod = asd.iterator();
                while(itrod.hasNext())
                {
                        RodamientoVO r=itrod.next();
                        System.out.println("Stock para "+r.getCodigo()+". Cantidad:"+Integer.toString(r.getStock().getCantidad()));
                }
                System.out.println("---------------------------------------------------");
                String xml=sr.toXml();
                System.out.println("Cargo SolicitudRodamientos::xml="+xml);
                odv.cargarSolicitudRodamientos(xml);

                // -----------------------------------
                // ACA HAY QUE APROBAR LA COTIZACION
                ArrayList<Cotizacion> cotiz = odv.getCoticaciones();
                if(cotiz.size()!=0)
                {
                        System.out.println("Aceptando cotizacion");
                        CotizacionVO cvo = new CotizacionVO();
                        cvo.setId(cotiz.get(0).getId());
                        odv.aceptarCotizacion(cvo);
                }
                else
                {
                        System.out.println("FALLA: -- NO SE CREO NINGUNA COTIZACION!!! --  ERROR ERROR");
                }
                // -----------------------------------

                System.out.println("--------------STOCK DE RODAMIENTOS DESPUES de solicitud---------------");
                itrod = asd.iterator();
                while(itrod.hasNext())
                {
                        RodamientoVO r=itrod.next();
                        System.out.println("Stock para "+r.getCodigo()+". Cantidad:"+Integer.toString(r.getStock().getCantidad()));
                }
                System.out.println("---------------------------------------------------");

                
//              ItemSolicitud itso= new ItemSolicitud(cpr.buscarRodamiento("1110"),2);
//              SolicitudRodamientoDAO.getInstancia().grabarItemSolicitudRodamiento(itso);
//              ItemSolicitud itso2= new ItemSolicitud(cpr.buscarRodamiento("1111"),2);
//              SolicitudRodamientoDAO.getInstancia().grabarItemSolicitudRodamiento(itso2);
                
                System.out.println("FIN DEL TEST");
        

                
                } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                
        }
        

        public static void crearProveedorConListaPrecios(String nombre,String cuit,String condCompra,Float descuento,Float precioCompra,String marca,String origen,String caract)
        {
                CPR cpr=new CPR();
                ProveedorVO provVO=new ProveedorVO(nombre,cuit,condCompra,descuento,"UADE 222","4444-4444");
                cpr.altaProveedor(provVO);
                Proveedor prov = cpr.buscarProveedor(provVO);
                provVO.setIdProveedor(prov.getCodigo());
                
                ListaPreciosVO lvo=new ListaPreciosVO("Base",new Date(), null);
                
                try {
                        cpr.altaListaPrecios(provVO, lvo);
                } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                Iterator<Rodamiento> it = AdminRodamiento.getInstance().obtenerRodamientos().iterator();
                while(it.hasNext())
                {
                        Double d = Math.random();
                        precioCompra = precioCompra + d.floatValue();
                        ItemListaPreciosVO ilpvo = new ItemListaPreciosVO(it.next().getCodigo(),precioCompra,marca,origen,caract);
                        try {
                                cpr.altaItemListaPrecios(provVO, "Base", ilpvo);
                        } catch (RemoteException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }
//                      System.out.println(it.next().toString());
                }
//              
                cpr.confirmarListaPrecios(prov, lvo);
        }
}